package collection;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

/**
 * @author Cheng Jun
 * Description: LinkedList 是一种 Deque 双向链表的实现。
 * @version 1.0
 * @date 2021/10/13 16:40
 * @see Queue
 */
public class LinkedListStudy {

    public static void main(String[] args) {
        LinkedList<String> nameList = new LinkedList<>();
        System.out.println(nameList.peek());
        // Collection方法的 element add remove 可能抛异常，具体看Queue源码注释
        // System.out.println(nameList.element());
        // 利用 断点跟踪进去看源码 是如何赋值和处理
        nameList.add("cauchy");
        nameList.add("cauchy6317");
        // 指定插入的位置，不能超过 LinkedList的 size
        nameList.add(1, "插队进来");
        nameList.addFirst("头部元素");
        nameList.addLast("尾部元素");
        nameList.contains("插队进来");
        System.out.println(nameList.poll());
        System.out.println(nameList.pollLast());
        // offer 和 add 相同 ,Collection
        nameList.offer("ddd");
        // poll 和 remove 相同
        nameList.remove();

        // 双端队列是将 头元素是 first， 尾元素是 tail
        // 它是将 first 当做 栈顶元素，所以push 方法是 改变头元素
        // 为了避免混淆，建议使用 addFirst addLast peekFirst peekLast pollFirst pollLast
        LinkedList<String> testPush = new LinkedList<>();
        testPush.push("1");
        testPush.push("2");
        testPush.push("3");
        System.out.println(testPush.pop());

    }
}
